package com.kiven.file;
import java.io.File;

public class FileTest {
	public static void main(String[] args) {
		
		/*File file = new File("/home/lijianbo/kivenTest/aa.txt");
		//file.ranameTo(File dest);该操作是将文件移动到指定的文件;
		System.out.println(file.renameTo(new File("/home/lijianbo/kivenTest/Race/aa_copy.txt")));*/
		
		
		/*
		 *单个文件可以移动，那么如何移动一个文件夹？
		 *实现了移动一个文件夹的功能 
		 * File file = new File("/home/lijianbo/kivenTest/aa");
		//file.ranameTo(File dest);该操作是将文件移动到指定的文件;
		System.out.println(file.renameTo(new File("/home/lijianbo/kivenTest/Race/aa_copy")));*/
		
		
		/*File oldFile = new File("/home/lijianbo/kivenTest/aa.xml");
		//file.ranameTo(File dest);该操作是将文件移动到指定的文件;
		File newFile = new File("/home/lijianbo/kivenTest/aa.bark");
		
		oldFile.renameTo(newFile);
		//renameTo()方法调用之后原来的文件就不存在了
		System.out.println(oldFile.exists());*/
		
		//oleFile.renameTo(new File("/home/lijianbo/kivenTest/1111_test.txt"));
		
		//System.out.println(file.renameTo(new File("/home/lijianbo/kivenTest/Race/aa_copy.txt")));
		
		new FileTest().moveFiles("/home/lijianbo/test","/home/lijianbo/kivenTest");
	}
	
	/**
	 * 移动文件夹
	 * @param from  原文件夹
	 * @param to	目标文件夹
	 */
	public void moveFiles(String from,String to) {
		File dir = new File(from);
		File moveDir = new File(to);
		
		System.out.println(dir.listFiles());
		File[] files = dir.listFiles();
		
		System.out.println(files);
		/*
		 * 这里不适合用files == null 来判断，因为即使dir.listFiles()所得到文件即使为空，但是也会创建该files数组的索引
		 * 所以为了程序的准确性，最好用长度来判断
		 */
		
		if(files.length == 0) {
			System.out.println("原文件夹中没有任何文件");
			return;
		}
		
		if(!moveDir.exists()) {
			moveDir.mkdirs();
			System.out.println("目标路径不存在，创建路径：" + to);
		}
		
		for(int i=0; i<files.length; i++) {
			if(files[i].isDirectory()) {
				moveFiles(files[i].getPath(),moveDir.getPath() + File.separator + files[i].getName());
			}
			
			File moveFile = new File(moveDir.getPath() + File.separator + files[i].getName());
			System.out.println("移动文件：" + moveFile.getName());
			files[i].renameTo(moveFile);
			
			/*
			 * 修改配置文件的信息
			 * 移动一个文件时，配置文件中的信息就做一次改变
			 * 
			 */
			if(!files[i].isDirectory()) {
				updateStatusFile(files[i].getPath(),files[i].getName());
			}
			
			files[i].delete();
		}
	}
	
	public void updateStatusFile(String path,String fileName) {
		
	}
}
